/**
* 在这里定义和用户相关的路由处理函数，供 /router/user.js 模块进行调用
*/

const db = require('../db/index');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
// 导入配置文件
const config = require('../config')

// 注册用户的处理函数
exports.regUser =  async (req, res) => {
  const { username, password } = req.body;
  // 检查用户名是否存在
  const checkUserQuery = 'SELECT * FROM user_management WHERE username = ?';
  db.query(checkUserQuery, [username], (err, results) => {
    if (err) {
      return res.status(500).json({ message: 'Database error' });
    }

    if (results.length > 0) {
      return res.status(400).json({ message: 'Username already exists' });
    }

    // 密码加密
    bcrypt.hash(password, 10, (err, hashedPassword) => {
      if (err) {
        return res.status(500).json({ message: 'Error hashing password' });
      }

      // 插入新用户到数据库
      const insertUserQuery = 'INSERT INTO user_management (username, password) VALUES (?, ?)';
      db.query(insertUserQuery, [username, hashedPassword], (err, results) => {
        if (err) {
          return res.status(500).json({ message: 'Database error' });
        }

        return res.status(201).json({ code:0,message: 'User registered successfully'});
      });
    });
  });
}
  
// 登录用户
exports.login = (req, res) => {
  const { username, password } = req.body;

  // 查找用户
  const findUserQuery = 'SELECT * FROM user_management WHERE username = ?';
  db.query(findUserQuery, [username], (err, results) => {
    if (err) {
      return res.status(500).json({ message: 'Database error' });
    }

    if (results.length === 0) {
      return res.status(400).json({ message: 'User not found' });
    }

    const user = results[0];

    // 比较密码
    bcrypt.compare(password, user.password, (err, isMatch) => {
      if (err) {
        return res.status(500).json({ message: 'Error comparing password' });
      }

      if (!isMatch) {
        return res.status(400).json({ message: 'Incorrect password' });
      }

      // 生成 JWT token
      const token = jwt.sign({ id: user.id, username: user.username },config.jwtSecretKey, {
        expiresIn: '10h',
      });
      return res.status(200).json({ code:0, message: 'Login successful', token: 'Bearer ' + token});
    });
  });
};

exports.userMessage=(req,res)=>{
  const username = req.params.username
  console.log(username)
  const sql = 'SELECT * FROM user_management WHERE username = ?';
  db.query(sql,username,(err,results)=>{
    if (err) {
      console.error('数据库查询失败:', err.stack);
      return res.status(500).json({ error: '数据库查询失败' });
    }

    // 如果找到用户信息
    if (results.length > 0) {
      res.json({code : 0,data:results[0]});
    } else {
      // 如果没有找到用户
      res.status(404).json({ error: '用户未找到' });
    }
  })
}

exports.userUpdateInfo=(req,res)=>{
  const {username, nickname, email}=req.body
  console.log(username, nickname, email)
  const sql='UPDATE user_management SET nickname= ?, email=? WHERE username = ? ;'
  db.query(sql,[nickname, email,username, ],(err,results)=>{
    if (err) {
      console.log(err);
      return res.status(500).json({ message: 'Database error' });
    }
    return res.status(201).json({ code:0,datd:results});
  })
}

exports.userUpdateavatar=(req,res)=>{
  const {username, avatar}=req.body
  console.log(username, avatar)
  const sql='UPDATE user_management SET avatar= ?  WHERE username = ? ;'
  db.query(sql,[avatar,username],(err,results)=>{
    if (err) {
      console.log(err);
      return res.status(500).json({ message: 'Database error' });
    }
    return res.status(201).json({ code:0,datd:results});
  })
}

exports.userUpdatepassword=(req,res)=>{
  const {username,old_pwd,new_pwd,re_pwd}=req.body
  console.log(username,old_pwd,new_pwd,re_pwd);
  if(new_pwd===re_pwd){
    const sql = 'SELECT * FROM user_management WHERE username = ?';
    const sql2 ='UPDATE user_management SET password= ?  WHERE username = ? ;'
    db.query(sql,username,(err,results)=>{
      if (err) {
        return res.status(500).json({ message: 'Database error' });
      }

      if (results.length === 0) {
        return res.status(400).json({ message: 'User not found' });
      }

      const user = results[0];

      // 比较密码
      bcrypt.compare(old_pwd, user.password, (err, isMatch) => {
        if (err) {
          return res.status(500).json({ message: 'Error comparing password' });
        }

        if (!isMatch) {
          return res.status(400).json({ message: 'Incorrect password' });
        }
        
          // 密码加密
        bcrypt.hash(new_pwd, 10, (err, hashedPassword) => {
          if (err) {
            return res.status(500).json({ message: 'Error hashing password' });
          }
          
          db.query(sql2,[hashedPassword,username],(err,results)=>{
            if (err) {
              console.log(err);
              return res.status(500).json({ message: 'Database error' });
            }
            return res.status(201).json({ code:0,datd:results});
        
          });
        })
      });
    });
  }
}